const {MongoClient, Collection} = require('mongodb');
// // 帮助我们连接和关闭数据库
// //  第一步
// async function connect(callback) {
//     // 获取客户端实例
//     const url = 'mongodb://127.0.0.1:27017'
//     const client = new MongoClient(url)

//     // 通过客户端 连接上mongodb
//     // connect方法 返回是一个promise对象
//     try{
//         await client.connect()

//         // 获取db实例
//         const db = client.db('z-blog');
//         // 获取集合实例
//         const collection = db.collection('user')

//         // 这个collection就是user
//         callback(collection);
      
//         // 关闭连接
//         await client.close();

//     }catch(e) {
//         console.log('出错了');
//         console.log(e);
//         // 关闭连接
//         await client.close();
//     }
// }

// // 这个collection对应的就是回调函数里面的collection，就是user
// connect((collection) =>{
//     return collection.findOne();
// })

// connect((collection) =>{
//     return collection.deleteOne();
// })




//  第二步
async function connect(collectionName,callback,dbName="z-blog",url = 'mongodb://127.0.0.1:27017') {
    // 获取客户端实例
    const client = new MongoClient(url)

    // 通过客户端 连接上mongodb
    // connect方法 返回是一个promise对象
    try{
        await client.connect()

        // 获取db实例
        const db = client.db(dbName);
        // 获取集合实例
        const collection = db.collection(collectionName)

        // 这个collection就是collectionName
        const result = await callback(collection);
        // const a = ///await fgbfg
      
        // 关闭连接
        await client.close();

        return result;

    }catch(e) {
        console.log('出错了');
        console.log("e1111111111111111111111111111111",e);
        // 关闭连接
        await client.close();

        //  因为 async函数 必须返回promise对象， 出现了错误的情况的话， 返回 状态为rejected的promise对象
        // 如果写的是return e;

        console.log("aaaaaa")
        return Promise.reject(e);

    }

    console.log("bbbbbbbb")


}

// 这个collection对应的就是回调函数里面的collectionName
connect("user",(collection) =>{
    return collection.findOne();//返回的是promise对象
}).then(data => console.log(data));

// connect("user",(collection) =>{
//     return collection.deleteOne();//返回的是promise对象
// })